function linear(t, b, s, d) {
    return s / d * t + b;
}
/**
 * 
 * @param {*} ele 
 * @param {*} attr 
 * @param {*} target 
 * @param {*} duration 
 * 第一版，使用utils.css函数版
 */
function animate(ele, attr, target, duration = 2000) {
   
    var t = 0;// 运动的时间
    var timeStep = 10; // 运动的时间间隔
    // 使用css函数获取当前位置
    var begin = utils.css(ele, attr); // 获取开始位置并转化成数字
    var s = target - begin;// 运动总路程
    ele.timer = setInterval(() => {
        // 1. 累加时间间隔
        t += timeStep;
        // 2. 判断停止条件
        if (t >= duration) {
            // 1 。到达目标位置后，清除定时器
            clearInterval(ele.timer);
            // 2. 让位置就是目标位置   使用css函数设置最新位置
            utils.css(ele, attr, target);
            return;
        }
        // 3. 给元素属性赋值
        var curPos = linear(t, begin, s, duration);
        // 使用css函数设置最新位置
        utils.css(ele, attr, curPos);
    }, timeStep);
}